package com.zx._12_算法.排序;

import com.zx._12_算法.Arrs.IAS;
import com.zx._12_算法.Nums;

/**
 * @version v1.0
 * @Project: knowledge
 * @Title: Sort1
 * @Description: No.1 冒泡排序--优化
 *         冒泡有一个最大的问题就是这种算法不管不管你有序还是没序，闭着眼睛把你循环比较了再说。
 *         比如我举个数组例子：[ 9，8，7，6，5 ]，一个有序的数组，根本不需要排序，
 *         它仍然是双层循环一个不少的把数据遍历干净，这其实就是做了没必要做的事情，属于浪费资源。
 *         针对这个问题，我们可以设定一个临时遍历来标记该数组是否已经有序，如果有序了就不用遍历了。
 * @author: zhangxue
 * @date: 2019年7月7日下午9:27:41
 * @company: 未知之地
 * @Copyright: Copyright (c) 2019
 */
public class Sort1_冒泡2 implements IAS {

    @Override
    public void sort(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            // 如果为true，表示 0 ~ (nums.length - i - 1) 范围内的数字不需要在排序了
            boolean isSort = true;
            for (int j = 0; j < nums.length - i - 1; j++) {
                //大的数据放后
                if (nums[j] > nums[j + 1]) {
                    Nums.swap(nums, j, j + 1);
                    isSort = false;
                }
            }
            if (isSort) {
                break;
            }
        }
    }

}
